package cn.itianlong.code;

import java.net.URL;

/**
 * Hello world!
 * 
 */
public class App {
	public static void main(String[] args) {
//		System.out.println(ClassLoader.getSystemClassLoader().getClass());
//		System.out.println(ClassLoader.getSystemClassLoader().getParent()
//				.getClass());
//		System.out.println(ClassLoader.getSystemClassLoader().getParent()
//				.getParent());

		String samePackageStr = "samePackage.txt";
		String rootStr = "/root.txt";
		String resourcesStr = "/config/cfg.txt";
		// ############################################################################################################
		// 1：使用本类的Class类的getResource()方法
		// 在当前包寻找资源(指定相对路径，其他均返回null。)
		URL filePathUrl1 = App.class.getResource(samePackageStr);

		// 在根寻找资源(需要文件分隔符"/"，其他均返回null。)
		URL filePathUrl2 = App.class.getResource(rootStr);

		// 在不同包内寻找资源(指定相对路径（需要文件分隔符"/"），其他均返回null。) /resource/resourcePackage.txt
		URL filePathUrl3 = App.class
				.getResource(resourcesStr); // 找resources 下的文件
				// 其他包下（resource）的   /resource/resourcePackage.txt
		URL filePathUrl4 = App.class
		.getResource("/resource/resourcePackage.txt"); // 找resources 下的文件
		
		System.out.println(filePathUrl1);
		System.out.println(filePathUrl2);
		System.out.println(filePathUrl3);
		System.out.println(filePathUrl4);
		
		System.out.println();
		System.out.println();
		System.out.println();
		// ############################################################################################################
		// 2：使用本类的Class类的ClassLoader类的getResource()方法
		// 在相同包内寻找资源，总是返回null。
		filePathUrl1 =
		 App.class.getClassLoader().getResource("cn/itianlong/code/samePackage.txt");

		// 在根寻找资源，指定相对路径，其他均返回null。
		filePathUrl2 = App.class.getClassLoader().getResource("root.txt");

		// 在不同包内寻找资源，指定相对路径，其他均返回null。
		filePathUrl3 = App.class.getClassLoader().getResource("resource/resourcePackage.txt");
		
		filePathUrl4 = App.class.getClassLoader().getResource("config/cfg.txt");
		
		System.out.println(filePathUrl1);
		System.out.println(filePathUrl2);
		System.out.println(filePathUrl3);
		System.out.println(filePathUrl4);
		
		System.out.println();
		System.out.println();
		System.out.println();
		
		// ############################################################################################################
        // 3：使用ClassLoader类的getSystemResource()方法
        // 在指定包内寻找资源，指定相对路径，其他均返回null。   其他package  和 resource 下的 都一样
		filePathUrl1 = ClassLoader.getSystemResource("cn/itianlong/code/samePackage.txt");
        // 同上
		filePathUrl2 = ClassLoader.getSystemClassLoader().getResource("cn/itianlong/code/samePackage.txt");

        // 在根寻找，指定相对路径，其他均返回null。
		filePathUrl3 = ClassLoader.getSystemResource("root.txt");
        // 同上
		filePathUrl4 = ClassLoader.getSystemClassLoader().getResource("root.txt");
        
        
        System.out.println(filePathUrl1);
		System.out.println(filePathUrl2);
		System.out.println(filePathUrl3);
		System.out.println(filePathUrl4);
		
		System.out.println();
		System.out.println();
		System.out.println();
		
        
        // ############################################################################################################
        // 4：使用Thread加载资源（推荐此方法）
        // 在指定包内寻找资源，(相对路径)，其他均返回null。
		filePathUrl1 = Thread.currentThread().getContextClassLoader().getResource("cn/itianlong/code/samePackage.txt");

        // 在根寻找，(相对路径)，其他均返回null。
		filePathUrl2 = Thread.currentThread().getContextClassLoader().getResource("root.txt");

        // 在不同包内寻找资源，(相对路径)，其他均返回null。
		filePathUrl3 = Thread.currentThread().getContextClassLoader().getResource("resource/resourcePackage.txt");
		
		filePathUrl4 = Thread.currentThread().getContextClassLoader().getResource("config/cfg.txt");
		System.out.println(filePathUrl1);
		System.out.println(filePathUrl2);
		System.out.println(filePathUrl3);
		System.out.println(filePathUrl4);
	}

}
